/**需求描述：
 编写一个静态方法 print2DArray，接收任意类型的二维数组作为参数，返回与 Arrays.toString() 格式类似的字符串。
 要求：
 (1)	支持 int[][]、String[][] 等常见数据类型
 (2)	正确处理空数组、null 元素等边界情况
 (3)	输出格式示例：[[1, 2], [3, 4], [5]]
 */
import java.util.Arrays;

public class Test3 {

    /**
     * 将任意类型的二维数组转换为格式化的字符串
     * @param array 二维数组
     * @return 格式化后的字符串
     */
    public static String print2DArray(Object array) {
        if (array == null) {
            return "null";
        }

        // 检查是否为二维数组
        if (!array.getClass().isArray() || !array.getClass().getComponentType().isArray()) {
            throw new IllegalArgumentException("Input must be a 2D array");
        }

        Object[] outerArray = (Object[]) array;
        StringBuilder sb = new StringBuilder("[");

        for (int i = 0; i < outerArray.length; i++) {
            if (i > 0) {
                sb.append(", ");
            }

            if (outerArray[i] == null) {
                sb.append("null");
            } else if (outerArray[i].getClass().isArray()) {
                // 处理内层数组
                sb.append(arrayToString(outerArray[i]));
            } else {
                throw new IllegalArgumentException("Inner elements must be arrays");
            }
        }

        sb.append("]");
        return sb.toString();
    }

    /**
     * 将一维数组转换为字符串
     * @param array 一维数组
     * @return 格式化后的字符串
     */
    private static String arrayToString(Object array) {
        if (array == null) {
            return "null";
        }

        Class<?> componentType = array.getClass().getComponentType();

        if (componentType == int.class) {
            return Arrays.toString((int[]) array);
        } else if (componentType == double.class) {
            return Arrays.toString((double[]) array);
        } else if (componentType == boolean.class) {
            return Arrays.toString((boolean[]) array);
        } else if (componentType == char.class) {
            return Arrays.toString((char[]) array);
        } else if (componentType == byte.class) {
            return Arrays.toString((byte[]) array);
        } else if (componentType == short.class) {
            return Arrays.toString((short[]) array);
        } else if (componentType == long.class) {
            return Arrays.toString((long[]) array);
        } else if (componentType == float.class) {
            return Arrays.toString((float[]) array);
        } else {
            return Arrays.toString((Object[]) array);
        }
    }

    public static void main(String[] args) {
        // 测试用例
        int[][] intArray = {{1, 2}, {3, 4}, {5}};
        String[][] stringArray = {{"a", "b"}, null, {"c"}};
        double[][] doubleArray = null;
        int[][] emptyArray = {};

        System.out.println(print2DArray(intArray));     // [[1, 2], [3, 4], [5]]
        System.out.println(print2DArray(stringArray));   // [[a, b], null, [c]]
        System.out.println(print2DArray(doubleArray));   // null
        System.out.println(print2DArray(emptyArray));    // []
    }
}